package srcTest;

import static org.junit.Assert.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.embeddable.EJBContainer;
import javax.naming.NamingException;

import junit.framework.Assert;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import com.sumset.daos.CategoriaDao;
import com.sumset.entidades.Categoria;



/**clase que prueba los metodos de la clase CategoriaDao
 * @author leyson FCP
 *
 */
public class CategoriaTest {

	private static EJBContainer contenedor;
	private static CategoriaDao cd;
	
	
	/**metodo que se corre de primero inicializando los atributos de clase 
	 * y crea una categoria para probar los metodos de la clase
	 * @throws NamingException
	 */
	@BeforeClass
	public static void primerMetodo() throws NamingException {
		Map<String, String> properties=new HashMap<String, String>();
		properties.put(EJBContainer.APP_NAME, "pratica_26");
		contenedor=EJBContainer.createEJBContainer(properties);
	    cd=(CategoriaDao) contenedor.getContext().lookup("java:global/pratica_26/CategoriaDao");
		Categoria c=new Categoria();
		c.setId(-1);
		c.setDescripcion("tales");
		cd.insert(c);
	}
	
	/**
	 * metodo que prueba el insertar de categoriaDao
	 * @throws Exception 
	 */
	@Test
	public void testInsert() throws Exception {
		Categoria c=new Categoria();
		c.setId(-2);
		c.setDescripcion("retalestales");
		cd.insert(c);
		c=cd.buscar(-2);
		Assert.assertEquals("2" , c.getId().toString());
	}
	/**
	 * metodo que prueba el actualizar de categoriaDao
	 * @throws Exception 
	 */
	@Test
	public void testUpdate() throws Exception {
		Categoria c=cd.buscar(-1);
		c.setDescripcion("tales editado");
		cd.update(c);
		c=cd.buscar(-1);
		Assert.assertEquals("tales editado", c.getDescripcion());
	}
	/**
	 * metodo que prueba el eliminar de categoriaDao
	 * @throws Exception 
	 */
	@Test
	public void testDelete() throws Exception {
		Categoria c=cd.buscar(-2);
		cd.delete(c);
		c=cd.buscar(-2);
		assertEquals(null, c);
	}
	/**
	 * metodo que prueba el buscar de categoriaDao
	 * @throws Exception 
	 */
	@Test
	public void testBuscar() throws Exception {
		Categoria c=cd.buscar(-1);
		Assert.assertEquals("-1", c.getId().toString());
	}
	/**
	 * metodo que prueba el listar de categoriaDao
	 * @throws Exception 
	 */
	@Test
	public void testListar() throws Exception {
		List<Categoria> lista=cd.listar();
		Categoria c=cd.buscar(-1);
		Assert.assertTrue(lista.contains(c));
		
	}
	
	
	/**metodo que se ejecuta de ultimo eliminado la categoria que se inserto 
	 * al incio para lipiar la bd
	 * @throws Exception 
	 */
	@AfterClass
	public static void ultimoMetodo() throws Exception {
		Categoria c=cd.buscar(-1);
		cd.delete(c);
	}

}
